
public class Analyze {
	
	/*
	 * Analyze.java
	 * 
	 * Runs analysis of MIDI data dumped into Statistics.java
	 * 
	 */

	/*
	 * Copyright (c) 2011 by Ryan Nikolaidis
	 * All rights reserved.
	 *
	 */
	
	public static void run()
	{
//		double sum = 0;
////		----------- Rhythm -------------------------------------
//		
////		convert onsets to durations
//		Main.stats.duration=new int[Main.stats.onset.length-2];
//		for (int i=1;i<Main.stats.onset.length-1;i++)
//		{
//			Main.stats.duration[i-1]=(int) ((Main.stats.onset[i]-Main.stats.onset[i-1]));
////			System.out.println("duration = "+Main.stats.duration[i-1]);
//		}
////		histogram of durations
//		for (int i=0;i<Main.stats.duration.length;i++)
//		{
//			if (Main.stats.duration[i]<960&&Main.stats.duration[i]>=0) //change 960's to histo_dur.length
//			{
//				Main.stats.histo_dur[Main.stats.duration[i]]++;
//			}
//		}
//	//		normalized version
//	//		find sum
//		sum = 0;
//		for (int i=0;i<960;i++)
//		{
//			sum=sum+Main.stats.histo_dur[i];
//		}
//		for (int i=0;i<960;i++)
//		{
//			Main.stats.histo_norm_dur[i]=Main.stats.histo_dur[i]/sum;
//		}
//		
//
//		
////		histogram of first order durations
//		for (int i=1;i<Main.stats.duration.length;i++)
//		{
////			System.out.println("---histo for last as "+Main.stats.duration[i]+" going to "+Main.stats.duration[i]);
//			if (Main.stats.duration[i]<960&&Main.stats.duration[i]>=0&&Main.stats.duration[i-1]<960&&Main.stats.duration[i-1]>=0)
//			{
////				System.out.println("histo "+i+" for last as "+Main.stats.duration[i]+" going to "+Main.stats.duration[i]);
//				Main.stats.histo_fo_dur[Main.stats.duration[i-1]][Main.stats.duration[i]]++;
//			}
//		}
//		//		normalized version
//		//		find sum
//
//		for (int i=0;i<960;i++)
//		{
//			sum = 0;
//			for (int j=0;j<960;j++)
//			{
//				sum=sum+Main.stats.histo_fo_dur[i][j];
//			}
//			for (int j=0;j<960;j++)
//			{
//				Main.stats.histo_norm_fo_dur[i][j]=Main.stats.histo_fo_dur[i][j]/sum;
//			}
//		}
//
//		
////		----------- Voice Leading -------------------------------------
//		
////		histogram of absolute pitch
//		for (int i=0;i<Main.stats.pitch.length-1;i++)
//		{
//			if (Main.stats.pitch[i]<128&&Main.stats.pitch[i]>0)
//			{
//				Main.stats.histo_pch[Main.stats.pitch[i]]++;
//			}
//		}
//	//		normalized
//		sum = 0;
//		for (int i=0;i<128;i++)
//		{
//			sum=sum+Main.stats.histo_pch[i];
//		}
//		for (int i=0;i<128;i++)
//		{
//			Main.stats.histo_norm_pch[i]=Main.stats.histo_pch[i]/sum;
//		}
//		
////		histogram of first order pitches
//		for (int i=1;i<Main.stats.pitch.length;i++)
//		{
////			System.out.println("---histo for last as "+Main.stats.duration[i]+" going to "+Main.stats.duration[i]);
//			if (Main.stats.pitch[i]<128&&Main.stats.pitch[i]>=0&&Main.stats.pitch[i-1]<128&&Main.stats.pitch[i-1]>=0)
//			{
//				System.out.println("histo "+i+" for last as "+Main.stats.pitch[i-1]+" going to "+Main.stats.pitch[i]);
//				Main.stats.histo_fo_pch[Main.stats.pitch[i-1]][Main.stats.pitch[i]]++;
//			}
//		}
//		//		normalized version
//		//		find sum
//
//		for (int i=0;i<127;i++)
//		{
//			sum = 0;
//			for (int j=0;j<127;j++)
//			{
//				sum=sum+Main.stats.histo_fo_pch[i][j];
//			}
//			for (int j=0;j<127;j++)
//			{
//				Main.stats.histo_norm_fo_pch[i][j]=Main.stats.histo_fo_pch[i][j]/sum;
//			}
//		}
//		
////		histogram of pitch intervals
//		for (int i=1;i<Main.stats.pitch.length-1;i++)
//		{
//			if (Main.stats.pitch[i]<128&&Main.stats.pitch[i]>0)
//			{
//				Main.stats.histo_int[Main.stats.pitch[i]-Main.stats.pitch[i-1]+128]++;
//			}
//		}
//	//		normalized
//		sum = 0;
//		for (int i=0;i<256;i++)
//		{
//			sum=sum+Main.stats.histo_int[i];
//		}
//		for (int i=0;i<256;i++)
//		{
//			Main.stats.histo_norm_int[i]=Main.stats.histo_int[i]/sum;
//		}
	
		
	}
	
	public static int[][] toArtistScore() {
		int artistDuration=Main.stats.duration.length*Main.stats.TPB; //		calculate duration of artist performance
		int songDuration=0;
		for (int i=0;i<Main.stats.chordDurations.length;i++) {
			songDuration=songDuration+Main.stats.chordDurations[i];
		}
		int numRepeats=artistDuration/songDuration;
		int[][] newScore = new int[3][Main.stats.chordRoots.length*numRepeats];
		for (int i=0;i<numRepeats*Main.stats.chordRoots.length;i++) 
		{
			newScore[0][i]=Main.stats.chordRoots[i%Main.stats.chordRoots.length];
			newScore[1][i]=Main.stats.chordQualities[i%Main.stats.chordRoots.length];
			newScore[2][i]=Main.stats.chordDurations[i%Main.stats.chordRoots.length];
		}
		return newScore;
	}
}
